import argparse

def args_parser():
    parser = argparse.ArgumentParser()

    # system
    parser.add_argument("--device", type=int, default=0)
    parser.add_argument("--seed", type=int, default=42)

    # hyper-parameters
    parser.add_argument("--lr", type=float, default=1e-5)
    parser.add_argument("--batch_size", type=int, default=16)
    parser.add_argument("--epoch", type=int, default=16)
    parser.add_argument("--weight_decay", type=float, default=0.1)
    parser.add_argument("--model", type=str)

    # offsite tuning
    parser.add_argument("--phase", type=str, required=True)
    parser.add_argument("--divided_depths", type=int, default=None, nargs='+', help="the length of every modular")
    parser.add_argument("--meta_divided_depths", type=int, default=None, nargs='+', help="the length of every modular")

    # model load
    parser.add_argument("--model_path", type=str)
    parser.add_argument("--config_path", type=str)

    # inference
    parser.add_argument("--client_layer_num", type=int)

    args = parser.parse_args()

    return args